/**
 * SysTypeServiceImpl.java -- 2017-10-18 21:15:13
 * 作者：欧增奇 -- 代码生成器自动生成
 * 联系方式：425752797@qq.com
 * http://www.ouzengqi.com/
 */
package com.ozq.sys.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ozq.common.page.Page;
import com.ozq.common.page.PageUtil;
import com.ozq.sys.dao.entity.SysType;
import com.ozq.sys.dao.mapper.SysTypeMapper;
import com.ozq.sys.service.inter.SysTypeService;

/**
 * <文章分类表接口实现> <功能详细描述>
 * 
 * @author 欧增奇
 * @version [V2.0, 2017-10-18 21:15:13]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Service("sysTypeService")
public class SysTypeServiceImpl implements SysTypeService
{
    static Logger logger = LoggerFactory.getLogger(SysTypeServiceImpl.class);

    /**
     * 文章分类表Mapper[SysType]
     */
    @Autowired
    private SysTypeMapper sysTypeMapper;

    /** ------------------------------------公共-工具------------------------------------ **/
    /**
     * 分页公共实现
     */
    @Override
    public Page pageManage(Page page)
    {
        logger.debug("debug page: {}", page);

        // 默认每页10条记录
        if (page.getEveryPage() <= 0)
            page.setEveryPage(10);

        // 默认第一页
        if (page.getCurrentPage() <= 0)
            page.setCurrentPage(1);

        return PageUtil.createPage(page.getEveryPage(), page.getTotalCount(), page.getCurrentPage());
    }

    /**
     * 缓存清理
     */
    @Override
    public void clearCache()
    {
        logger.debug("清理文章分类表缓存成功:{}", "sysType");
    }

    /** ------------------------------------公共-业务------------------------------------ **/
    /** --公共-业务-统计-- **/
    /**
     * 统计文章分类表所有的记录数
     * 
     * @return int
     */
    @Override
    public int countAll()
    {
        return sysTypeMapper.countAll();
    }

    /**
     * 按照条件精确统计文章分类表
     * 
     * @param sysType
     * @return int
     */
    @Override
    public int countBy(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return 0;

        return sysTypeMapper.countBy(sysType);
    }

    /**
     * 按照条件模糊统计文章分类表
     * 
     * @param sysType
     * @return int
     */
    @Override
    public int countLike(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return 0;

        return sysTypeMapper.countLike(sysType);
    }

    /** --公共-业务-添加-- **/
    /**
     * 插入文章分类表
     * 
     * @param sysType
     * @return sysType
     */
    @Override
    public SysType add(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return null;

        sysTypeMapper.insert(sysType);
        return sysType;
    }

    /**
     * 插入文章分类表集合
     * 
     * @param sysType
     * @return boolean
     */
    @Override
    public boolean addList(List<SysType> sysTypes)
    {
        logger.debug("debug sysTypes: {}", sysTypes);

        if (sysTypes == null || sysTypes.isEmpty())
            return false;

        List<SysType> inserts = filterEmpty(sysTypes);
        if (inserts.isEmpty())
            return false;

        sysTypeMapper.insertList(inserts);
        return true;
    }

    /**
     * 批量插入文章分类表，当id存在更新这条数据，不存在插入这条数据（注意：会影响所有字段）
     * 
     * @param sysTypes
     * @return boolean
     */
    @Override
    public boolean addUpdateList(List<SysType> sysTypes)
    {
        logger.debug("debug sysTypes: {}", sysTypes);

        if (sysTypes == null || sysTypes.isEmpty())
            return false;

        List<SysType> inserts = filterEmpty(sysTypes);
        if (inserts.isEmpty())
            return false;

        sysTypeMapper.insertUpdateList(inserts);
        return true;
    }

    /** --公共-业务-查询-- **/
    /**
     * 按照文章分类表查询,如果存在id，则用id查询(本方法只会返回一条数据，当查询有1条以上返回null)
     * 
     * @param sysType
     * @return sysType
     */
    @Override
    public SysType find(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return null;
        
        if (sysType.getTypeId() != null)
            return sysTypeMapper.selectById(sysType.getTypeId());

        sysType.setStartLine(0);
        sysType.setEndLine(1);
        List<SysType> list = sysTypeMapper.listBy(sysType);
        if (list == null || list.isEmpty())
            return null;

        return list.get(0);
    }

    /**
     * 按照id查询文章分类表
     * 
     * @param typeId
     * @return sysType
     */
    @Override
    public SysType findById(Integer typeId)
    {
        logger.debug("debug typeId: {}", typeId);

        if (typeId == null)
            return null;

        return sysTypeMapper.selectById(typeId);
    }

    /**
     * 按照ids查询文章分类表
     * 
     * @param typeIds
     * @return sysType集合
     */
    @Override
    public List<SysType> findByIds(List<Integer> typeIds)
    {
        logger.debug("debug typeIds: {}", typeIds);

        if (typeIds == null || typeIds.isEmpty())
            return null;

        return sysTypeMapper.selectByIds(typeIds);
    }

    /**
     * 按照条件精确查询文章分类表返回集合方法
     * 
     * @param sysType
     * @return sysType
     */
    @Override
    public List<SysType> listBy(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return null;

        return sysTypeMapper.listBy(sysType);
    }

    /**
     * 按照条件模糊查询文章分类表返回集合方法
     * 
     * @param sysType
     * @return sysType集合
     */
    @Override
    public List<SysType> listLike(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return null;

        return sysTypeMapper.listLike(sysType);
    }

    /**
     * 按照分页条件精确查询文章分类表返回集合方法
     * 
     * @param sysType
     * @return sysType集合
     */
    @Override
    public List<SysType> listPageBy(Page page, SysType sysType)
    {
        logger.debug("debug page: {}", page);
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            sysType = new SysType();

        if (page != null)
        {
            sysType.setStartLine(page.getBeginIndex());
            sysType.setEndLine(page.getEveryPage());
        }

        return sysTypeMapper.listBy(sysType);
    }

    /**
     * 按照分页条件模糊查询文章分类表返回集合方法
     * 
     * @param sysType
     * @return sysType集合
     */
    @Override
    public List<SysType> listPageLike(Page page, SysType sysType)
    {
        logger.debug("debug page: {}", page);
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            sysType = new SysType();

        if (page != null)
        {
            sysType.setStartLine(page.getBeginIndex());
            sysType.setEndLine(page.getEveryPage());
        }

        return sysTypeMapper.listLike(sysType);
    }

    /** --公共-业务-修改-- **/
    /**
     * 修改文章分类表
     * 
     * @param sysType
     * @return boolean
     */
    @Override
    public boolean update(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null || sysType.getTypeId() == null)
            return false;

        sysTypeMapper.update(sysType);
        return true;
    }

    /**
     * 批量修改文章分类表
     * 
     * @param sysTypes
     * @return boolean
     */
    @Override
    public boolean updateList(List<SysType> sysTypes)
    {
        logger.debug("debug sysTypes: {}", sysTypes);

        if (sysTypes == null)
            return false;

        List<SysType> news = new ArrayList<SysType>();
        for (SysType sysType : sysTypes)
            if (sysType != null && sysType.getTypeId() != null)
                news.add(sysType);

        if (news.isEmpty())
            return false;

        sysTypeMapper.updateList(news);
        return true;
    }

    /** --公共-业务-删除-- **/
    /**
     * 指定id删除
     * 
     * @param typeId
     * @return boolean
     */
    @Override
    public boolean deleteById(Integer typeId)
    {
        logger.debug("debug typeId: {}", typeId);

        if (typeId == null)
            return false;

        sysTypeMapper.deleteById(typeId);
        return true;
    }

    /**
     * 批量删除指定ids
     * 
     * @param typeId
     * @return boolean
     */
    @Override
    public boolean deleteByIds(List<Integer> typeIds)
    {
        logger.debug("debug typeIds: {}", typeIds);

        if (typeIds == null || typeIds.isEmpty())
            return false;

        sysTypeMapper.deleteByIds(typeIds);
        return true;
    }

    /**
     * 按照条件精确删除文章分类表
     * 
     * @param sysType
     * @return boolean
     */
    @Override
    public boolean deleteBy(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return false;

        sysTypeMapper.deleteBy(sysType);
        return true;
    }

    /**
     * 按照条件模糊删除文章分类表
     * 
     * @param sysType
     * @return boolean
     */
    @Override
    public boolean deleteLike(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        if (sysType == null)
            return false;

        sysTypeMapper.deleteLike(sysType);
        return true;
    }

    /** --公共-业务-自定义-- **/
    /**
     * 自定义方法
     * 
     * @param sysType
     * @return map集合
     */
    @Override
    public List<Map<String, Object>> custom(SysType sysType)
    {
        logger.debug("debug sysType: {}", sysType);

        // 自己实现自己的业务
        // sysTypeMapper.selectCustom(selectSQL);
        return null;
    }

    /** ------------------------------------私有-方法------------------------------------ **/
    /**
     * 过滤参数为空
     * 
     * @param sysTypes
     * @return sysType集合
     */
    private List<SysType> filterEmpty(List<SysType> sysTypes)
    {
        List<SysType> news = new ArrayList<SysType>();
        for (SysType sysType : sysTypes)
            if (sysType != null)
                news.add(sysType);
        return news;
    }
}